package com.sparkseries.domain.vo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.Date;

/**
 * 系统日志视图对象（VO），用于封装系统日志的相关信息，
 * 包含日志的基本信息、请求信息、用户信息以及异常信息等，
 * 可在视图层进行展示和传输。
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SysLogVO implements Serializable {

    private static final long serialVersionUID = 1L;

    /**
     * 日志的唯一标识
     */
    private Long id;

    /**
     * 日志的级别，如 INFO、WARN、ERROR 等
     */
    private String logLevel;

    /**
     * 日志的类型，如系统日志、业务日志等
     */
    private String logType;

    /**
     * 日志所记录的操作描述
     */
    private String logOperation;

    /**
     * 创建该日志的用户标识
     */
    private String createBy;

    /**
     * 日志的创建日期和时间
     */
    private Date createDate;

    /**
     * 请求的 URI 地址
     */
    private String requestUri;

    /**
     * 请求所使用的方法，如 GET、POST 等
     */
    private String requestMethod;

    /**
     * 请求所携带的参数信息
     */
    private String requestParams;

    /**
     * 请求的执行时长，单位为毫秒
     */
    private Integer requestTime;

    /**
     * 用户代理信息，通常包含客户端的浏览器和操作系统信息
     */
    private String userAgent;

    /**
     * 客户端的操作 IP 地址
     */
    private String remoteAddr;

    /**
     * 请求的服务器地址
     */
    private String serverAddr;

    /**
     * 操作结果状态标识
     * 0 表示操作失败
     * 1 表示操作过程中出现异常
     */
    private Integer status;

    /**
     * 当操作出现异常时，记录的异常详细信息
     */
    private String errorInfo;

    /**
     * 日志详细信息
     */
    private String info;

    /**
     * 验证对象的基本信息是否有效
     *
     * @return 如果对象的基本信息有效返回 true，否则返回 false
     */
    public boolean isValid() {
        return logLevel != null && !logLevel.isEmpty()
                && logType != null && !logType.isEmpty()
                && logOperation != null && !logOperation.isEmpty();
    }
}